/**
 * 封装 axios 请求模块
 */
import axios from "axios"
import { Notify } from "vant";
import jsonBig from 'json-bigint'

const req = axios.create({
    //   baseURL: "http://ttapi.research.itcast.cn" // 基础路径
    baseURL: "", // 基础路径
    // transformResponse 允许自定义原始的响应数据（字符串）
    transformResponse: [function (data) {
        try {
            // 如果转换成功则返回转换的数据结果
            return jsonBig.parse(data)
        } catch (err) {
            // 如果转换失败，则包装为统一数据格式并返回
            return {
                data
            }
        }
    }]
})

// 请求拦截
req.interceptors.request.use((config) => {
    config.headers.Authorization = localStorage.getItem('TOKEN')
    return config
})
// 响应拦截
req.interceptors.response.use(
    (res) => {
    return res
    },
    (err) => {
        if (err.response.status === 401) {
            router.push('/login')
        }
    }
)

export default req

/**
 * @param {Promise<any>} promiseInstance
 * @returns { Promise<{any}> }
 */
export function withMsg(promiseInstance) {
    return new Promise((resolve, reject) => {
        promiseInstance
            .then((res) => {
                Notify({ type: 'success', message: res.data.message });
                resolve(res)
            })
            .catch((err) => {
                Notify({ type: 'danger', message: err.response.data.message });
                reject(err)
            });
    })
}
/**
 * @param {async () => any} callback
 */
export function withLoading(fn) {
    return async function (...args) {
        this.loading = true
        await fn.call(this, ...args)
        this.loading = false
    }
}